package org.example.安全漏洞;

import org.dom4j.io.SAXReader;
import org.xml.sax.SAXException;

/**
 * 1、XML 解析器不应允许包含任意文件
 * XML 标准允许使用`xinclude`元素包含 xml 文件。
 * <p>
 * XML 处理器将使用位于 href 属性中定义的 URI 的文件内容替换 `xinclude `元素，
 * 可能来自外部存储，例如文件系统或网络，如果没有设置限制，这可能导致任意文件披露或
 * <a href="https://www.owasp.org/index.php/Server_Side_Request_Forgery">服务器端请求伪造 (SSRF)漏洞</a>
 *
 * @author Wang Yuanhang
 * @date 2022/5/12 17:39
 */
public class Demo1 {
    public static void main(String[] args) throws Exception {
        // 不合规代码
        nonCompliance();
        // 合规代码
        compliance();
    }

    private static void nonCompliance() throws SAXException {
        SAXReader xmlReader = new SAXReader();
        // Noncompliance
        xmlReader.setFeature("http://apache.org/xml/features/xinclude", true);
    }

    private static void compliance() throws SAXException {
        SAXReader xmlReader = new SAXReader();
        // Compliance
        xmlReader.setFeature("http://apache.org/xml/features/xinclude", false);
    }
}
